أهم المرشحات المتوفرة بشكل قياسي في محرك القوالب Jinja – الجزء الأول
محرك القوالب Jinja هو أحد أشهر وأقوى أدوات القوالب المستخدمة في لغة بايثون، وهو يتمتع بشعبية كبيرة في تطوير تطبيقات الويب، خصوصًا مع أطر العمل مثل Flask وDjango (عبر بعض التعديلات). من أهم ميزات Jinja هو دعمه الواسع للمرشحات (Filters)، وهي أدوات تسمح بمعالجة البيانات وتعديلها بشكل مرن وسلس داخل القوالب. المرشحات تسهل التعامل مع البيانات وتجعل القوالب أكثر تفاعلية وديناميكية، حيث يمكن للمطورين تعديل النصوص، القوائم، الأرقام، والتواريخ بسهولة قبل عرضها للمستخدم النهائي.
في هذا المقال سيتم استعراض مجموعة من أهم المرشحات القياسية التي يوفرها محرك Jinja بشكل افتراضي، مع شرح مفصل لكل منها وطريقة استخدامها وأمثلة تطبيقية تساعد في فهمها بشكل أعمق.
مفهوم المرشحات في Jinja
قبل الخوض في تفاصيل المرشحات، من المهم فهم ما هي المرشحات في سياق Jinja. ببساطة، المرشح هو وظيفة يتم تطبيقها على المتغيرات داخل القالب لتحويلها أو تعديلها أو تنسيقها. الشكل الأساسي لاستخدام المرشح هو:
jinja{{ variable | filter_name }}
يمكن أيضًا تمرير معاملات إلى المرشحات في بعض الحالات، مثل:
jinja{{ variable | filter_name(argument) }}
المرشحات تساعد في تحسين جودة العرض وتوفير الوقت، إذ لا حاجة لكتابة الكثير من التعليمات البرمجية في ملفات بايثون، بل يمكن تعديل القيم مباشرة في القوالب.
1. مرشح lower
يُستخدم هذا المرشح لتحويل النص إلى حروف صغيرة (أحرف صغيرة فقط). هذا مفيد في كثير من الحالات عند الحاجة إلى عرض نص موحد الشكل بغض النظر عن شكل النص الأصلي.
مثال:
jinja{{ "HELLO WORLD" | lower }}
النتيجة:
nginxhello world
2. مرشح upper
على النقيض من lower، هذا المرشح يحول النص إلى حروف كبيرة (Capital letters)، ويُستخدم لتسليط الضوء على نص أو لجعله أكثر وضوحًا.
مثال:
jinja{{ "hello world" | upper }}
النتيجة:
nginxHELLO WORLD
3. مرشح capitalize
يقوم هذا المرشح بتحويل أول حرف من النص إلى حرف كبير، مع تحويل بقية الأحرف إلى صغيرة. هذا مفيد لعرض عناوين أو أسماء بطريقة أنيقة.
مثال:
jinja{{ "python programming" | capitalize }}
النتيجة:
nginxPython programming
4. مرشح title
يقوم بتحويل كل كلمة في النص إلى حرف كبير في أولها، وهو شائع الاستخدام في العناوين التي تتطلب تنسيقًا خاصًا.
مثال:
jinja{{ "python programming language" | title }}
النتيجة:
sqlPython Programming Language
5. مرشح trim
يقوم هذا المرشح بحذف الفراغات البيضاء من بداية ونهاية النص. يمكن أن يكون ذلك مهمًا جدًا عند التعامل مع مدخلات المستخدم التي قد تحتوي على مسافات زائدة.
مثال:
jinja{{ " hello world " | trim }}
النتيجة:
nginxhello world
6. مرشح striptags
هذا المرشح مهم جدًا عند الحاجة إلى إزالة جميع الوسوم HTML من النص. مثالي عند استقبال محتوى HTML من المستخدم وترغب في تنظيفه لعرضه كنص فقط.
مثال:
jinja{{ "Hello World" | striptags }}
النتيجة:
nginxHello World
7. مرشح replace
يتيح هذا المرشح استبدال جزء من النص بآخر. يأخذ معاملين: النص المراد استبداله، والنص الجديد.
مثال:
jinja{{ "Hello World" | replace("World", "Jinja") }}
النتيجة:
nginxHello Jinja
8. مرشح length
يستخدم هذا المرشح لحساب طول السلسلة النصية أو عدد العناصر في قائمة أو أي بنية بيانات قابلة للعد.
مثال:
jinja{{ "Hello" | length }}
النتيجة:
5
وأيضًا يمكن استخدامه مع القوائم:
jinja{{ [1, 2, 3, 4] | length }}
النتيجة:
4
9. مرشح default
هذا المرشح مهم جداً لتوفير قيمة افتراضية في حالة كانت القيمة الأصلية فارغة أو غير موجودة (None أو False). مفيد لضمان عدم ظهور محتوى فارغ في الصفحة.
مثال:
jinja{{ username | default("Guest") }}
في حالة عدم وجود متغير username، أو إذا كان فارغًا، سيتم عرض “Guest”.
10. مرشح join
يُستخدم هذا المرشح لدمج قائمة من العناصر إلى سلسلة نصية مفصولة بفاصل معين. يأخذ الفاصل كسلسلة نصية.
مثال:
jinja{{ ["Python", "Jinja", "Flask"] | join(", ") }}
النتيجة:
Python, Jinja, Flask
11. مرشح sort
يقوم هذا المرشح بترتيب عناصر القائمة تصاعدياً بشكل افتراضي. يمكن أن يكون مفيدًا لترتيب البيانات في العرض.
مثال:
jinja{{ [3, 1, 4, 2] | sort }}
النتيجة:
csharp[1, 2, 3, 4]
12. مرشح reverse
يعمل هذا المرشح على عكس ترتيب عناصر القائمة أو النص.
مثال:
jinja{{ [1, 2, 3, 4] | reverse }}
النتيجة:
csharp[4, 3, 2, 1]
وأيضًا مع النصوص:
jinja{{ "abcd" | reverse }}
النتيجة:
nginxdcba
13. مرشح round
يستخدم هذا المرشح لتقريب الأعداد العشرية إلى عدد محدد من المنازل العشرية، ويأخذ معاملًا اختياريًا لتحديد عدد الأرقام بعد الفاصلة.
مثال:
jinja{{ 3.14159 | round(2) }}
النتيجة:
3.14
14. مرشح int
يقوم بتحويل القيمة إلى عدد صحيح. هذا مفيد لتحويل أنواع البيانات أو التعامل مع القيم الرقمية قبل عرضها.
مثال:
jinja{{ "123" | int }}
النتيجة:
123
15. مرشح float
يشابه المرشح السابق، لكنه يقوم بتحويل القيمة إلى عدد عشري (float).
مثال:
jinja{{ "3.14" | float }}
النتيجة:
3.14
جدول مقارنة لأهم المرشحات ووظائفها
| المرشح | الوظيفة | مدخلات إضافية | ملاحظات |
|---|---|---|---|
| lower | تحويل النص إلى حروف صغيرة | لا | مفيد للتوحيد |
| upper | تحويل النص إلى حروف كبيرة | لا | لجعل النص بارزاً |
| capitalize | تكبير الحرف الأول فقط | لا | مناسب للعناوين |
| title | تكبير أول حرف لكل كلمة | لا | شائع في تنسيق العناوين |
| trim | إزالة الفراغات من البداية والنهاية | لا | لتنظيف النصوص |
| striptags | إزالة الوسوم HTML | لا | للحماية والتنظيف |
| replace | استبدال نص معين | نعم | يستقبل نصين (قديم، جديد) |
| length | حساب الطول أو عدد العناصر | لا | يدعم النصوص والقوائم |
| default | إظهار قيمة افتراضية إذا كان فارغ | نعم | يحسن تجربة المستخدم |
| join | دمج قائمة إلى نص مفصول | نعم | يستخدم فاصل نصي |
| sort | ترتيب العناصر تصاعدياً | لا | مفيد للقوائم |
| reverse | عكس الترتيب | لا | يدعم النصوص والقوائم |
| round | تقريب الأعداد | نعم (عدد المنازل) | يدعم تقريب القيم الرقمية |
| int | تحويل إلى عدد صحيح | لا | لتحويل النصوص إلى أعداد صحيحة |
| float | تحويل إلى عدد عشري | لا | لتحويل النصوص إلى أعداد عشرية |
الخاتمة
تُعتبر المرشحات في Jinja من الركائز الأساسية التي تجعل من القوالب أداة قوية ومرنة في بناء صفحات الويب. هذه المرشحات تسهل تعديل البيانات وتحسين طريقة عرضها دون الحاجة إلى تعديل الكود البرمجي الخاص بالتطبيق، مما يسرّع عملية التطوير ويجعل الكود أكثر نظافة وتنظيماً. كما يمكن أيضًا إنشاء مرشحات مخصصة لتلائم احتياجات المشاريع المعقدة، لكنها غالبًا ما تبدأ بالاعتماد على هذه المجموعة القياسية من المرشحات.
في الجزء الأول من هذا المقال تم استعراض أهم وأشهر المرشحات القياسية التي توفر إمكانيات واسعة لمعالجة النصوص، القوائم، والأرقام. تظل معرفة كيفية استخدام هذه المرشحات بشكل فعّال مفتاحًا لإتقان التعامل مع محرك Jinja والرفع من جودة التطبيق بشكل عام.

